import { IQueue, IQueueIterator } from "./types";
import ArrayList from '@/sources/ArrayList'

// 队列
export default class Queue<T = number> implements IQueue<T> {
    private al: ArrayList<T>
    constructor() {
        // 初始化arrayList
        this.al = new ArrayList<T>()
    }

    /**
     * 获取队列的长度
     */
    size() {
        return this.al.size()
    }

    /**
     * 判断队列是否为空
     */
    isEmpty() {
        return this.al.isEmpty();
    }

    /**
     * 清空队列元素
     */
    clear() {
        this.al.clear()
    }

    /**
     * 入队
     * @param element 
     */
    enQueue(element: T) {
        this.al.add(element)
    }

    /**
     * 出队
     */
    deQueue() {
        return this.al.remove(0);
    }

    /**
     * 获取队头元素
     */
    front() {
        return this.al.get(0)
    }

    /**
     * 遍历队列
     */
    forEach(cb: IQueueIterator<T>) {
        this.al.forEach(cb)
    }
} 